Java SE 7 提供了 Multi-Catch 這個簡化你多重 catch 程式碼的功能,那使用上有什麼要注意的嗎?
之前例外處理有順序性的問題,例如你先 catch IOException 後,就不能再 catch FileNotFoundException。因為 IOException 是 FileNotFoundException 的父類別。例外是衣序處理的,Java 執行時先看到 IOException 就會處理所有 IOException 及其子類別的例外,這是Java 的一個轉型(polymorphism)的特性。所以接下來的 FileNotFoundException 的程式碼就不會被執行到,在編譯時就會報錯!
所以如果我們將前一天的程式碼的 IOException 改成 Exception。Exception 是所有例外的父類別,當然接下來的 NumberFormatException 和 ArithmeticException 就沒有機會被 catch 到。在Eclipse 編輯環境裡,就會劃一條紅紅的線,當你把滑鼠指標移上去紅線的位置,就會告訴你錯誤的原因:
也許你會說,那我都不用管什麼其他的例外,全部使用 Exception,也就不需要多重例外處理了,不是嗎?就語法上來講是沒錯,不過這樣一來就失去了程式的可讀性,沒有人知道你在 catch 哪一行的什麼例外,除非你加上註解。所以最好的方式,還是精確地把你程式要處理的例外寫清楚比較好,這是個該養成的好習慣。